define(function(){
	// checkbox
	var CheckBtn=function (config){
		var checkBtn=this;
		config=config || {};
		checkBtn.$dom=$('<span></span>');
		checkBtn.$icon=$('<span class="icon icon-size-16 icon-checkbox" data-type="checkbox"></span>').appendTo(checkBtn.$dom);
		checkBtn.$input=$('<input type="checkbox">').appendTo(checkBtn.$icon);
		if(config.labelText){
			checkBtn.$label=$('<span data-type="label"></span>').appendTo(checkBtn.$dom);
			checkBtn.$label.text(config.labelText);
		}
		if(config.inputName){
			checkBtn.$input.attr('name',config.inputName);
		}
		if(config.checkedMax){
			checkBtn.$input.attr('data-checkmax',config.checkedMax);
		}
		if(config.checked!==undefined){
			checkBtn.checked(config.checked);
		}
		if(config.disabled!==undefined){
			checkBtn.disabled(config.disabled);
		}
		if(config.checkAll){
			checkBtn.$input.attr('data-checkall',config.checkAll);
		}
	}
	function checkBtnDisabled($input,$icon,newStatus,readonly){
		switch(newStatus){
			case true:
				if(readonly!==true){
					$icon.addClass('disabled');
				}
				$input.prop('disabled',true);
				break;
			case false:
				$icon.removeClass('disabled');
				$input.prop('disabled',false);
				break;
			case undefined:
				return $input.prop('disabled');
				break;
		}
	}
	CheckBtn.prototype.disabled=function(newStatus,readonly){
		var checkBtn=this;
		return checkBtnDisabled(checkBtn.$input,checkBtn.$icon,newStatus,readonly);
	}
	function checkBtnChecked($input,$icon,newStatus,important){
		if(newStatus==='tiggle'){
			newStatus= !$input.prop('checked');
		}
		switch(newStatus){
			case true:
				if($input.prop('disabled') && important!==true){
					return false;
				}
				$icon.addClass('checked');
				$input.prop('checked',true).change();
				return true;
				break;
			case false:
				if($input.prop('disabled') && important!==true){
					return false;
				}
				$icon.removeClass('checked');
				$input.prop('checked',false).change();
				return true;
				break;
			case undefined:
				return $input.prop('checked');
				break;
		}
	}
	function checkboxInputChecked(checkboxInput,status,important){
		var $input=$(checkboxInput);
		var $icon=$input.parent('.icon');
		return checkBtnChecked($input,$icon,status,important);
	}
	CheckBtn.prototype.checked=function(newStatus,important){
		var checkBtn=this;
		return checkBtnChecked(checkBtn.$input,checkBtn.$icon,newStatus,important);
	}
	function checkboxCheckedMax(checkboxInput){
		var $input=$(checkboxInput);
		var checkedMax=$.parseInt($input.attr('data-checkedmax'));
		var $checkedSameNameInput;
		if(checkedMax>0){
			$sameNameCheckedInput=$('input[name="'+$input.attr('name')+'"]:checked');
			if(checkedMax===1){
				$sameNameCheckedInput.each(function(i,checkedInput){
					if(checkedInput!==checkboxInput){
						checkboxInputChecked(checkedInput,false);
					}
				});
			}else{
				if($sameNameCheckedInput.length>checkedMax){
					_Tips('选择已达到上限');
					return false;
				}
			}
		}
		return true;
	}

	$('body').on('click','input[type="checkbox"]',function(e){
		if(checkboxCheckedMax(this)===false){
			e.preventDefault();
		};
	});
	var resetCheckallBtnStatusTimeout;
	function resetCheckallBtn($checkboxInput){
		function resetFn(){
			if(!$checkboxInput.prop('checked')){
				$('input[data-checkall="'+$checkboxInput.attr('name')+'"]').prop('checked',false).parent('.icon').removeClass('checked');
			}
		}
		clearTimeout(resetCheckallBtnStatusTimeout);
		resetCheckallBtnStatusTimeout=setTimeout(function(){
			resetFn();
		},100)
	}
	$('body').on('change','input[type="checkbox"]',function(){
		var $checkInput=$(this);
		var checkedStatus=$checkInput.prop('checked');
		var $iconCheckBox=$checkInput.parent('[data-type="checkbox"]');
		if($iconCheckBox.length>0){
			if(checkedStatus){
				$iconCheckBox.addClass('checked');
			}else{
				$iconCheckBox.removeClass('checked');
			}
		}
		var checkallSameName=$checkInput.attr('data-checkall');
		if(checkallSameName){
			$('input[name="'+checkallSameName+'"]').each(function(i,subCheckboxInput){
				checkboxInputChecked(this,checkedStatus);
			});
		}else{
			resetCheckallBtn($checkInput);
		}

	});


	$('body').on('click','[data-type="label"]',function(){
		var $prevCheckbox=$(this).prevAll('[data-type="checkbox"]');
		if($prevCheckbox.length>0){
			$prevCheckbox.eq(0).children('input[type="checkbox"]').click();
		}
	});

/*
	$('body').on('click','[data-type="checkbox-ul"] [data-type="checkbox-li"]',function(){

		var $this=$(this);
		var $list=$this.parent('[data-type="checkbox-ul"]');
		var checkedMax=$.parseInt($list.attr('data-checkedmax') || '1');
		if(checkedMax<1){
			checkedMax=1;
		}
		if($this.hasClass('checked') && checkedMax>1){
			$this.removeClass('checked').find('.icon-radio,.icon-checkbox').removeClass('checked');
			return false;
		}
		if($list.children('[data-type="checkbox-li"].checked').length<checkedMax){
			$this.addClass('checked').find('.icon-radio,.icon-checkbox').addClass('checked');
		}else{
			if(checkedMax<2){
				$this.find('.icon-radio,.icon-checkbox').addClass('checked');
				$this.addClass('checked').siblings('[data-type="checkbox-li"]').removeClass('checked').find('.icon-radio,.icon-checkbox').removeClass('checked');
			}else{
				_Tips('最多可选'+checkedMax+'个选项')
			}
		}

	});
    */

	window.CheckBtn=CheckBtn;
	return CheckBtn;
})
